package com.qkjia.channel;

import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
 * FileChanne写操作
 */
public class FileChannelDemo2 {

    public static void main(String[] args) throws Exception {
        // 打开FileChannel       为“rw”且安全管理器的checkWrite方法拒绝对文件的写访问
        RandomAccessFile aFile = new RandomAccessFile("e:\\qkjia\\001.txt","rw");
        FileChannel channel = aFile.getChannel();

        // 创建buffer对象
        // ByteBuffer.allocate(1024);分配一个新的字节缓冲区
        ByteBuffer buffer = ByteBuffer.allocate(1024);

        String newData = "data qkjia";
        // 清除此缓冲区。 将位置设置为零，将限制设置为容量，并丢弃标记。
        buffer.clear();

        // 写入内容
        buffer.put(newData.getBytes());

        //  buffer.flip() 翻转这个缓冲区。 将限制设置为当前位置，然后将位置设置为零。 如果定义了标记，则将其丢弃。
        // 在一系列通道读取或放置操作之后，调用此方法以准备一系列通道写入或相关获取操
        buffer.flip();

        //FileChannel完成最终实现
        // buf.hasRemaining() 告诉当前位置和限制之间是否有任何元素。
        while (buffer.hasRemaining()) {
            channel.write(buffer);
        }

        //关闭
        channel.close();
    }
}
